package com.boss.salary.service;

import com.boss.common.entity.PageDTO;
import com.boss.framework.dto.PaginationDTO;
import com.boss.framework.exception.AppRuntimeException;
import com.boss.salary.entity.PersonOperate;
import com.boss.salary.vo.ComparisonResultVo;
import com.singularsys.jep.JepException;

import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.util.List;
import java.util.Map;

public interface IPersonOperateStandardService {
    /**
     * 分页查询 人员信息操作表数据
     * @param paginationDTO
     * @return
     * @throws AppRuntimeException
     */
    PageDTO<PersonOperate> queryPersonOperatePage(PaginationDTO paginationDTO) throws AppRuntimeException;

    /**
     * 增加 人员信息操作表数据
     * @param personOperate
     * @return
     */
    void savePersonOperate(PersonOperate personOperate);

    /**
     * 更新 人员信息操作表数据
     * @param personOperate
     * @return
     */
    void updatePersonOperate(PersonOperate personOperate);

    /**
     * 根据id删除人员信息操作表数据
     * @param id
     * @return
     */
    void deletePersonOperate(String id);

    /**
     * 身份证核对分页查询
     * @param paginationDTO
     * @param queryParam
     * @return
     * @throws AppRuntimeException
     */
    PageDTO<PersonOperate> getPersonOperatePage(PaginationDTO paginationDTO, Map<String, Object> queryParam) throws AppRuntimeException;

    /**
     * 获取人员变动情况
     * @param paginationDTO
     * @param queryParam
     * @return
     * @throws AppRuntimeException
     */
    PageDTO<PersonOperate> getPersonChangeList(PaginationDTO paginationDTO, Map<String, Object> queryParam) throws AppRuntimeException;

    /**
     * 操作表最新的人员数据 -- 人员变动编辑
     * @param paginationDTO
     * @param queryParam
     * @return
     * @throws AppRuntimeException
     */
    PageDTO<PersonOperate> getPersonInfoChangeOperatePage(PaginationDTO paginationDTO, Map<String, Object> queryParam) throws AppRuntimeException;

    /**
     * 身份证信息核对
     * @param list
     */
    void checkPassPersonOperate(List<PersonOperate> list);

    /**
     * 撤回身份证核对
     * @param list
     */
    void undoCheckPersonOperate(List<PersonOperate> list);


    /**
     * 撤销操作
     * @param list
     */
    void revokeOperate(List<PersonOperate> list);

    /**
     * 退回操作
     * @param list
     */
    void rejectOperate(List<PersonOperate> list);

    /**
     * 人员变动审核-审核通过
     * @param list
     */
    void personApproved(List<PersonOperate> list) throws ParseException, InvocationTargetException, NoSuchMethodException, JepException, IllegalAccessException;

    /**
     * 人员变动审核-撤销审核
     * @param personOperate
     */
    void rejectPersonApproved(PersonOperate personOperate) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException;

    /**
     * 人员变动审核-撤销审核
     * @param list
     */
    void revokeVerify(List<PersonOperate> list) ;

    /**
     * 修改身份证号
     * @param personOperate
     */
    void updatePersonOperateID(PersonOperate personOperate);

    /**
     * 撤销修改身份证号码
     * @param personOperate
     */
    void undoCheckPersonOperateID(PersonOperate personOperate);

    /**
     * 送审
     * @param list
     */
    void forReviewPersonOperate(List<PersonOperate> list);

    /**
     * 人员变动送审
     * @param list
     */
    void submitPersonOperateList(List<PersonOperate> list);

    /**
     * 撤销送审
     * @param list
     */
    void undoForReviewPersonOperate(List<PersonOperate> list);

    /**
     * 人员变动撤销送审
     * @param list
     */
    void undoSubmitPersonOperateList(List<PersonOperate> list);

    /**
     * 获取在职和离休人数
     * @return
     */
    Map<String, Object> getStateNum(Map<String, Object> queryParam);

    /**
     * 身份证审核
     * @param list
     */
    void auditPassPersonOperate(List<PersonOperate> list);

    /**
     * 身份证审核退回
     * @param list
     */
    void undoAuditPassPersonOperate(List<PersonOperate> list);

    /**
     * 获取人员的变更记录类型
     * @param agencyId
     * @param personId
     * @return
     */
    List<ComparisonResultVo> getPersonOperateRecordType(String agencyId, String personId, String personState);

    /**
     * 获取人员的变更记录
     * @param agencyId
     * @param personId
     * @return
     */
    List<ComparisonResultVo> getPersonOperateRecord(String agencyId, String personId, String operateCode,String creatTime);

    /**
     * 撤销审核
     * @param list
     */
    void undoAuditPersonOperateList(List<PersonOperate> list);


    /**
     *
     * @param personid
     * @return
     */
    PersonOperate getOldPersonOperate (String personid);

    /**
     * 通过单位id查询当前单位已有的人数
     * agencyId
     */
    Integer queryExistingNumber(String agencyId,String payCode);



    PersonOperate getSalaryMonth(String agencyId);


}
